home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / dev / gui / MultiDesktop.lha / MultiDesktop / menutest.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-03-27  |  5.9 KB  |  255 lines

  1. #include <graphics/clip.h>
  2. #include <graphics/layers.h>
  3. #include <intuition/screens.h>
  4. #include <graphics/rastport.h>
  5.  
  6. struct IntuitionBase *IntuitionBase;
  7. struct GfxBase       *GfxBase;
  8. struct LayersBase    *LayersBase;
  9.  
  10. struct NewWindow DummyWin=
  11. {
  12.  50,300,320,61,0,0,0L,BORDERLESS|NOCAREREFRESH,0L,0L,0L,0L,0L,
  13.  640,256,640,256,WBENCHSCREEN
  14. };
  15.  
  16. struct NewScreen DummyScr=
  17. {
  18.  0,380,640,40,3,0,1,HIRES|LACE,CUSTOMSCREEN,0,"Title",0,0
  19. };
  20.  
  21. struct NewWindow nw=
  22. {
  23.  75,75,500,80,
  24.  0,1,
  25.  CLOSEWINDOW|MENUPICK|MENUVERIFY,
  26.  WINDOWDEPTH|WINDOWCLOSE|WINDOWDRAG|ACTIVATE|GIMMEZEROZERO,
  27.  0L,0L,"MenüTest!",0L,0L,
  28.  100,20,640,256,
  29.  WBENCHSCREEN
  30. };
  31.  
  32. struct Screen *ss;
  33.  
  34. void HelpOn();
  35. void HelpOff();
  36. void Help();
  37.  
  38. struct IntuiText t1={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 1",0L};
  39. struct IntuiText t2={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 2",0L};
  40. struct IntuiText t3={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 3",0L};
  41. struct IntuiText t4={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 4",0L};
  42. struct IntuiText t5={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 5",0L};
  43. struct IntuiText t6={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 6",0L};
  44. struct IntuiText t7={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 7",0L};
  45. struct IntuiText t8={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 8",0L};
  46. struct IntuiText t9={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 9",0L};
  47. struct IntuiText t0={AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,0,0L,"Menu-Item Nummer 10",0L};
  48.  
  49. struct MenuItem i0={0L,  5, 135, 200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t0,0L,0,NULL,NULL};
  50. struct MenuItem i9={&i0, 5, 120, 200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t9,0L,0,NULL,NULL};
  51. struct MenuItem i8={&i9, 5, 105, 200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t8,0L,0,NULL,NULL};
  52. struct MenuItem i7={&i8, 5, 90,  200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t7,0L,0,NULL,NULL};
  53. struct MenuItem i6={&i7, 5, 75,  200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t6,0L,0,NULL,NULL};
  54. struct MenuItem i5={&i6, 5, 60,  200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t5,0L,0,NULL,NULL};
  55. struct MenuItem i4={&i5, 5, 45,  200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t4,0L,0,NULL,NULL};
  56. struct MenuItem i3={&i4, 5, 30,  200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t3,0L,0,NULL,NULL};
  57. struct MenuItem i2={&i3, 5, 15,  200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t2,0L,0,NULL,NULL};
  58. struct MenuItem i1={&i2, 5, 0,   200, 15, ITEMENABLED|ITEMTEXT|HIGHCOMP,0L,&t1,0L,0,NULL,NULL};
  59.  
  60. struct Menu m4={0L,   380, 0, 80, 10,  MENUENABLED, "Test #4", &i1};
  61. struct Menu m3={&m4,  270, 0, 80, 10,  MENUENABLED, "Test #3", &i1};
  62. struct Menu m2={&m3,  160, 0, 80, 10,  MENUENABLED, "Test #2", &i1};
  63. struct Menu m1={&m2,  10,  0, 80, 10,  MENUENABLED, "Test #1", &i1};
  64.  
  65. struct Window   *win;
  66. struct RastPort *rp,*lrp;
  67. struct Layer    *Layer;
  68. struct Window   *Dummy;
  69. struct Layer_Info *li;
  70.  
  71.  
  72. main()
  73. {
  74.  BOOL  ende;
  75.  WORD  x,y,b;
  76.  ULONG Class;
  77.  UWORD Code;
  78.  UWORD Qualifier;
  79.  struct IntuiMessage *msg;
  80.  
  81.  IntuitionBase=OpenLibrary("intuition.library",0L);
  82.  GfxBase=OpenLibrary("graphics.library",0L);
  83.  LayersBase=OpenLibrary("layers.library",0L);
  84.  if((IntuitionBase==NULL)||(GfxBase==NULL)||(LayersBase==NULL)) exit(0);
  85.  
  86.  win=OpenWindow(&nw);
  87.  if(win!=NULL)
  88.   {
  89.    SetMenuStrip(win,&m1);
  90.    rp=win->RPort;
  91.    SetAPen(rp,7);
  92.    RectFill(rp,20,20,450,60);
  93.  
  94.    ende=FALSE;
  95.    do
  96.     {
  97.      b=0;
  98.      WaitPort(win->UserPort);
  99.      msg=GetMsg(win->UserPort);
  100.      Class=msg->Class;
  101.      Code=msg->Code;
  102.      Qualifier=msg->Qualifier;
  103.      x=msg->MouseX;
  104.      y=msg->MouseY;
  105.      if(Class==MENUVERIFY)
  106.       {
  107.        ModifyIDCMP(win,INTUITICKS|CLOSEWINDOW|MENUPICK|MENUVERIFY);
  108.        HelpOn();
  109.       }
  110.      ReplyMsg(msg);
  111.      switch(Class)
  112.       {
  113.        case CLOSEWINDOW:
  114.          ende=TRUE;
  115.         break;
  116.        case MENUPICK:
  117.          ModifyIDCMP(win,CLOSEWINDOW|MENUPICK|MENUVERIFY);
  118.          HelpOff();
  119.          x=MENUNUM(Code);
  120.          y=ITEMNUM(Code);
  121.         break;
  122.        case MOUSEMOVE:
  123.         break;
  124.        case INTUITICKS:
  125.          Help(&m1);
  126.         break;
  127.       }
  128.     }
  129.    while(ende==FALSE);
  130.  
  131.    ClearMenuStrip(win);
  132.    CloseWindow(win);
  133.   }
  134.  else
  135.    puts("FEHLER: Kann Fenster nicht öffnen!");
  136.  
  137.  CloseLibrary(GfxBase);
  138.  CloseLibrary(IntuitionBase);
  139.  CloseLibrary(LayersBase);
  140.  exit(0);
  141. }
  142.  
  143. void Help(m)
  144.  struct Menu *m;
  145. {
  146.  UBYTE                 buffer[40];
  147.  UWORD                 i,j,mn,in;
  148.  register struct Menu     *menu;
  149.  struct MenuItem *item;
  150.  
  151.  if(Layer==NULL) return;
  152.  
  153.  menu=m; i=0; mn=1234; in=1234;
  154.  while(menu!=NULL)
  155.   {
  156.    if(menu->Flags & MIDRAWN)
  157.     {
  158.      mn=i;
  159.      break;
  160.     }
  161.    else
  162.     {
  163.      i++;
  164.      menu=menu->NextMenu;
  165.     }
  166.   }
  167.  
  168.  if(mn!=1234)
  169.   {
  170.    i=0;
  171.    item=menu->FirstItem;
  172.    while(item!=NULL)
  173.     {
  174.      if(item->Flags & HIGHITEM)  /* SUBs: ISDRAWN */
  175.       {
  176.        in=i;
  177.        break;
  178.       }
  179.      else
  180.       {
  181.        item=item->NextItem;
  182.        i++;
  183.       }
  184.     }
  185.   }
  186.  else
  187.   in=1000;
  188.  
  189.  sprintf(&buffer,"M=%4ld  I=%4ld",mn,in);
  190.  Move(lrp,20,20);
  191.  Text(lrp,&buffer,strlen(&buffer));
  192. }
  193.  
  194. void HelpOff()
  195. {
  196.  struct Screen     *scr;
  197.  int                i;
  198.  BOOL               bool;
  199.  scr=win->WScreen;
  200.  
  201.  Dummy=OpenWindow(&DummyWin);
  202.  
  203.  if(Layer)
  204.   {
  205.    DeleteLayer(0L,Layer);
  206.    Layer=NULL;
  207.   }
  208.  if(li)
  209.   {
  210.    DisposeLayerInfo(li);
  211.    li=NULL;
  212.   }
  213.  
  214.  
  215.  if(Dummy)
  216.   {
  217.    CloseWindow(Dummy);
  218.    Dummy=NULL;
  219.   }
  220.  
  221.  if(ss) CloseScreen(ss);
  222. }
  223.  
  224. void HelpOn()
  225. {
  226.  struct Layer_Info *li;
  227.  struct Screen     *scr;
  228.  int                i,j;
  229.  
  230.  ss=OpenScreen(&DummyScr);
  231.  if(ss==NULL) puts("ERROR");
  232.  
  233.  scr=win->WScreen;
  234.  li=NewLayerInfo();
  235.  if(li==NULL) return;
  236.  
  237.  Layer=CreateUpfrontLayer(li,&scr->BitMap,50,300,370,360,LAYERSIMPLE,NULL);
  238.  if(Layer)
  239.   {
  240.    lrp=Layer->rp;
  241.  
  242.    SetAPen(lrp,3);
  243.    Move(lrp,1,1);
  244.    Draw(lrp,318,1);
  245.    Draw(lrp,318,58);
  246.    Draw(lrp,1,58);
  247.    Draw(lrp,1,1);
  248.    SetAPen(lrp,7);
  249.  
  250.    Help();
  251.   }
  252.  
  253. }
  254.  
  255.